# -*- coding:utf-8 -*-
import math
import re

import pymysql
from retrying import retry
from sshtunnel import SSHTunnelForwarder
import requests
from loguru import logger

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}


def page_point_upload(data):
    data_list = [data[i*500:(i+1)*500] for i in range(math.ceil(len(data)/500))]
    headers = {'content-type': 'application/json'}
    url = 'https://www.wpooldata.com.cn/reviewapi/api-i/openapi/saveUnitPage'
    for num, dt in enumerate(data_list):
        resp = requests.post(url, json=dt, headers=headers, timeout=100)
        if resp.json()['code'] == "200":
            logger.debug(f"{len(dt)}数据上传成功")


def is_number(s):
    try:  # 如果能运行float(s)语句，返回True（字符串s是浮点数）
        float(s)
        return True
    except ValueError:  # ValueError为Python的一种标准异常，表示"传入无效的参数"
        pass  # 如果引发了ValueError这种异常，不做任何事情（pass：不做任何事情，一般用做占位语句）
    try:
        import unicodedata  # 处理ASCii码的包
        unicodedata.numeric(s)  # 把一个表示数字的字符串转换为浮点数返回的函数
        return True
    except (TypeError, ValueError):
        pass
    return False


def format_data(oid, payload_list):
    data_list = []
    for aid, payload in enumerate(payload_list):
        data_list.append({
            "id": aid+1,
            "orgId": oid,
            "level": 4,
            "pid": 1,
            "title": payload[0],
            "type": 'data',
            "url": payload[1]
        })
    return data_list


class ServerTunnel:
    def __init__(self):
        self.server = SSHTunnelForwarder(
            ssh_address_or_host=('124.71.205.245', 22),
            ssh_username='wpapp',
            ssh_password='ArRvJZdDF9NbLV2z',
            remote_bind_address=('192.168.0.136', 3306)
        )

    def start(self):
        self.server.start()

    def stop(self):
        self.server.stop()


class SQLServer:
    app = ServerTunnel()
    app.start()
    mysql_config = {
        'user': 'wpread',
        'passwd': 'rHUI5p2ikQxo0ute',
        'host': '127.0.0.1',
        'port': app.server.local_bind_port,
        'db': 'fair_review'
    }
    conn = pymysql.connect(**mysql_config)
    cursor = conn.cursor()

    def query_count(self, org_id):
        self.cursor.execute(f"SELECT COUNT(*) FROM t_review_page WHERE org_id={org_id}")
        count = self.cursor.fetchone()[0]
        self.app.stop()
        return count

    def query(self, sql):
        self.cursor.execute(sql)
        return self.cursor.fetchall()


@retry(stop_max_attempt_number=3, wait_fixed=5 * 1000)
def http_get(url, params=None):
    if params:
        response = requests.get(url, params=params, headers=headers)
    else:
        response = requests.get(url, headers=headers)
    return response


def str_sub(text1, text2):
    """ 字符串减法: 长字符-短字符 """
    short, long = sorted([text1, text2])
    return long.replace(short, '')


def is_same(text1, text2):
    resp = str_sub(text1, text2)
    if resp in ["/", "#", '', '/index.html', 'index.html', 'index', '/index']:          # 加特殊的
        return True
    else:
        return False


def get_xpath_root_path(driver, element):
    ''' 根据element对象获取菜单路径 '''
    return driver.execute_script(
        "function absoluteXPath(element) {" +
        "var comp, comps = [];" +
        "var parent = null;" +
        "var xpath = '';" +
        "var getPos = function(element) {" +
        "var position = 1, curNode;" +
        "if (element.nodeType == Node.ATTRIBUTE_NODE) {" +
        "return null;" +
        "}" +
        "for (curNode = element.previousSibling; curNode; curNode = curNode.previousSibling) {" +
        "if (curNode.nodeName == element.nodeName) {" +
        "++position;" +
        "}" +
        "}" +
        "return position;" +
        "};" +
        "if (element instanceof Document) {" +
        "return '/';" +
        "}" +
        "for (; element && !(element instanceof Document); element = element.nodeType == Node.ATTRIBUTE_NODE ? element.ownerElement : element.parentNode) {" +
        "comp = comps[comps.length] = {};" +
        "switch (element.nodeType) {" +
        "case Node.TEXT_NODE:" +
        "comp.name = 'text()';" +
        "break;" +
        "case Node.ATTRIBUTE_NODE:" +
        "comp.name = '@' + element.nodeName;" +
        "break;" +
        "case Node.PROCESSING_INSTRUCTION_NODE:" +
        "comp.name = 'processing-instruction()';" +
        "break;" +
        "case Node.COMMENT_NODE:" +
        "comp.name = 'comment()';" +
        "break;" +
        "case Node.ELEMENT_NODE:" +
        "comp.name = element.nodeName;" +
        "break;" +
        "}" +
        "comp.position = getPos(element);" +
        "}" +
        "for (var i = comps.length - 1; i >= 0; i--) {" +
        "comp = comps[i];" +
        "xpath += '/' + comp.name.toLowerCase();" +
        "if (comp.position !== null) {" +
        "xpath += '[' + comp.position + ']';" +
        "}" +
        "}" +
        "return xpath;" +
        "}" +
        "return absoluteXPath(arguments[0]);", element)



# print(query('3100002'))
# data = [{'id': 1, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '组织机构', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77287/index.html'}, {'id': 2, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '政府信息公开', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77289/index.html'}, {'id': 3, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '公众互动', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77290/index.html'}, {'id': 4, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '网上办事', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77291/index.html'}, {'id': 5, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': 'more>', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col8065/index.html'}, {'id': 6, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': 'more>', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77309/index.html'}, {'id': 7, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': 'more>', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77310/index.html'}, {'id': 8, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': 'more>', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77314/index.html'}, {'id': 9, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': 'more>', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col8382/index.html'}, {'id': 10, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': 'more>', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col8511/index.html'}, {'id': 11, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': 'more>', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77499/index.html'}, {'id': 12, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '会计综合管理平台', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77590/index.html'}, {'id': 13, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '涉企服务', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77331/index.html'}, {'id': 14, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': 'more>', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77292/index.html'}, {'id': 15, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '机构职能', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77294/index.html'}, {'id': 16, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '办公室(政策研究室)', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77359/index.html'}, {'id': 17, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '预算处、预算审核中心', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77360/index.html'}, {'id': 18, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '国库处(财政支付局)', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77361/index.html'}, {'id': 19, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '政府采购管理处', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77362/index.html'}, {'id': 20, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '税政处', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77364/index.html'}, {'id': 21, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '经济建设处', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77366/index.html'}, {'id': 22, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '工贸发展处', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77367/index.html'}, {'id': 23, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '行政政法处', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77369/index.html'}, {'id': 24, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '教科文处', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77370/index.html'}, {'id': 25, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '社会保障处', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77371/index.html'}, {'id': 26, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '农业农村处', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77373/index.html'}, {'id': 27, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '自然资源和生态环境处', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77374/index.html'}, {'id': 28, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '绩效管理处', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77376/index.html'}, {'id': 29, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '基金管理处', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77377/index.html'}, {'id': 30, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '会计处', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77378/index.html'}, {'id': 31, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '人事教育处', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77381/index.html'}, {'id': 32, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '机关党委', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77382/index.html'}, {'id': 33, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '离退休干部处', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77415/index.html'}, {'id': 34, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '江苏省财政厅宣教中心', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77392/index.html'}, {'id': 35, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '江苏省财政科学研究所', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77393/index.html'}, {'id': 36, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '江苏财会职业学院', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77402/index.html'}, {'id': 37, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '江苏省财政学会', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77384/index.html'}, {'id': 38, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '江苏省农村财政研究会', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77385/index.html'}, {'id': 39, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '江苏省会计学会', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77386/index.html'}, {'id': 40, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '江苏省资产评估协会', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77388/index.html'}, {'id': 41, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '江苏省珠算协会', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77389/index.html'}, {'id': 42, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': 'more>', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col8499/index.html'}, {'id': 43, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': 'more>', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col78636/index.html'}, {'id': 44, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': 'more>', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77333/index.html'}, {'id': 45, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '信用公示', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/sgskjss/sgs/xzxkxx/list.do'}, {'id': 46, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '头条新闻', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col8064/index.html'}, {'id': 47, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '江苏财政', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col7938/index.html'}, {'id': 48, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '图片新闻', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col7954/index.html'}, {'id': 49, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '视频新闻', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col7955/index.html'}, {'id': 50, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '市县动态', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77300/index.html'}, {'id': 51, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '法定主动公开内容', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77305/index.html'}, {'id': 52, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '政府信息公开指南', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77303/index.html'}, {'id': 53, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '政府信息公开制度', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77304/index.html'}, {'id': 54, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '财政法规制度', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77684/index.html'}, {'id': 55, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '政府预决算', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77316/index.html'}, {'id': 56, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '部门预决算', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77317/index.html'}, {'id': 57, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '财政数据', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77318/index.html'}, {'id': 58, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '政府采购', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col84851/index.html'}, {'id': 59, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '人事任免', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77319/index.html'}, {'id': 60, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '建议提案办理结果', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77320/index.html'}, {'id': 61, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '政府信息公开年报', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77306/index.html'}, {'id': 62, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '专题专栏', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77498/index.html'}, {'id': 63, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '活动专题', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77500/index.html'}, {'id': 64, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '查看更多', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77591/index.html'}, {'id': 65, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '查看更多', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77594/index.html'}, {'id': 66, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '会计学会门户网站', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col82038/index.html'}, {'id': 67, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '机构设置', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77293/index.html'}, {'id': 68, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '机关处室', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77295/index.html'}, {'id': 69, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '厅属单位', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77296/index.html'}, {'id': 70, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '厅属社团', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77297/index.html'}, {'id': 71, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '工作通知', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77592/index.html'}, {'id': 72, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '政策解读', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col77595/index.html'}, {'id': 73, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '学会介绍', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col82044/index.html'}, {'id': 74, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '行业动态', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col82040/index.html'}, {'id': 75, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '学术交流', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col82042/index.html'}, {'id': 76, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '法规制度', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col83763/index.html'}, {'id': 77, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '政策解读', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col83764/index.html'}, {'id': 78, 'orgId': 320019, 'level': 4, 'pid': 1, 'title': '学会章程', 'type': 'data', 'url': 'http://czt.jiangsu.gov.cn/col/col82045/index.html'}]
# headers = {'content-type': 'application/json'}
# url = 'https://www.wpooldata.com.cn/reviewapi/api-j/openapi/saveUnitPage'
# resp = requests.post(url, json=data[1:], headers=headers, timeout=100)
# print(resp.text)
